Jersey-2.x-User-Guide

4.5. Java SE Deployment Environments Java 部署环境

4.5.1. HTTP servers

Java 基于HTTP服务器代表简约、灵活的部署 Jersey 应用程序。HTTP 服务器通常是嵌入在应用程序和配置,从编程中启动。一般来说,Jersey 容器特定的 HTTP 服务器提供了一个定制工厂方法返回一个正确初始化 HTTP 服务器实例。

4.5.1.1. JDK Http Server

从 Java SE 6 开始,Java 运行时附带一个内置的轻量级的 HTTP 服务器。Jersey 通过 jersey-container-jdk-http 容器扩展模块,提供集成这个 Java SE HTTP 服务器,而不是直接创建 HttpServer 实例,使用 JdkHttpServerFactory 的 createHttpServer()方法,它根据 Jersey 容器配置和 Application 子类提供的初始化创建 HttpServer 。

创建一个 内嵌 Jersey 的jdk http server 非常简单:

Example 4.5. 使用 Jersey 和 JDK HTTP Server

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
ResourceConfig config = new ResourceConfig(MyResource.class);
HttpServer server = JdkHttpServerFactory.createHttpServer(baseUri, config);

JDK HTTP 容器依赖:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-jdk-http</artifactId>
    <version>2.16</version>
</dependency>

4.5.1.2. Grizzly HTTP Server

Grizzly 是一个多协议框架建立在Java NIO。Grizzly 旨在简化强大的和可扩展的服务器开发。Jersey 提供了一个容器的扩展模块,可以使用 Grizzly 作为运行J AX-RS 应用普通的HTTP容器支持。从 Grizzly 服务器运行 JAX-RS 或 Jersey的应用是一个最轻和容易的方法来展现RESTful服务应用功能。

Grizzly 容器支持 HTTP 注射 Grizzly 的特性 org.glassfish.grizzly.http.server.Request 和org.glassfish.grizzly.http.server.Response 实例到 JAX-RS 和Jersey 应用资源和供应者。然而,由于 Grizzly 的 Request 是非代理性的,Grizzly Request的注入到单例(默认)的JAX-RS /和Jersey 提供者只可能通过javax.inject.Provider实例。(Grizzly Response会遭受同样的限制。)

Example 4.6. 使用 Jersey 和 Grizzly HTTP Server

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
    ResourceConfig config = new ResourceConfig(MyResource.class);
    HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri, config);

容器扩展模块依赖要加入:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-http</artifactId>
    <version>2.16</version>
</dependency>

注意:通过测试框架, Jersey 使用 Grizzly 广泛的在项目单位和端到端进行测试。

4.5.1.3. Simple 服务器

Simple 是一个框架允许开发者创建 HTTP 服务器砬,并嵌入到应用中。再次,创建服务器实例通过从 jersey-container-simple-http 容器扩展模块调用工厂方法实现。

Simple 的框架支持HTTP容器注入 Simple 框架特性 org.simpleframework.http.Request 和 org.simpleframework.http.Response 实例到 JAX-RS 和 Jersey 应用资源和供应者。

Example 4.7. 使用 Jersey 和 Simple 框架

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
    ResourceConfig config = new ResourceConfig(MyResource.class);
    SimpleContainer server = SimpleContainerFactory.create(baseUri, config);

容器扩展模块依赖要加入:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-simple-http</artifactId>
    <version>2.16</version>
</dependency>

注意:Simple HTTP 框架容器不支持部署在上下文路除了根路径是 ("/")。非root上下文路径在部署中是被忽略的。

4.5.1.4. Jetty HTTP Server

Jetty 是流行的 Servlet 容器和 HTTP 服务器。在此我们不深究 Jetty 作为 Servlet 容器的能力(尽管我们在我们的测试和实例使用它),因为那里没有什么具体到 Jetty 当使用基于 Servlet 部署模型,在 第4.7节,“基于 Servlet 部署”部分。我们将在这里只重点描述如何使用 Jetty 的 HTTP 服务器。

Jetty HTTP 容器支持注入 Jetty 特性的org.eclipse.jetty.server.Request 和 org.eclipse.jetty.server.Response 实例到 JAX-RS 和 Jersey 应用资源和供应者。然而,由于 Jetty HTTP Request 是非代理性的,Jetty Request的注入到单例(默认)的JAX-RS /和Jersey 提供者只可能通过javax.inject.Provider实例。(Jetty Response会遭受同样的限制。)

Example 4.8. 使用 Jersey 和 Jetty HTTP Server

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
ResourceConfig config = new ResourceConfig(MyResource.class);
Server server = JettyHttpContainerFactory.createServer(baseUri, config);

容器扩展模块依赖要加入:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>2.16</version>
</dependency>

注意:Jetty HTTP 容器不支持部署在上下文路除了根路径是 ("/")。非root上下文路径在部署中是被忽略的。